Java使いがSwiftを学ぶ – #1 基本構文
Swiftはじめました
最近、いまさらながらSwiftをさわり始めました。
Ojective-Cは、あの独特の記法がどうも苦手で避けてきたのですが、
SwiftはAppleが「モダンです」といっているように、すんなりと受け入れられました。
自分はもともとJavaメインでやってきたのですが、ここではJavaとSwiftのコードを比較しつつ、
基本〜各種構文をまとめていきます。
Swiftとは
Swiftは2014年6月にWWDCで発表されたプログラミング言語です。(現在は2.0)
言語自体は最近の風潮をとりいれており、とっつきやすい(自分は)構文になっています。
また、先程もいったように、「モダン・安全・高速・インタラクティブ」なプログラミングが可能で、
次のような機能も持っています。
- XcodeのPlaygroundsやコンソールのREPLで簡単に動作確認できる
- クロージャ/ジェネリクス/Optionとか使える
- 静的な型のチェック/数値のオーバーフロー検査/自動参照カウントのメモリ管理の機能を持つ
- if文のブレース省略不可/switch文はbreakいらず
Swiftの実行方法
Swiftのコードを実行する方法はいくつかあります。
XcodeでプロジェクトのLanguageを「Swift」で作成するか、playgroundを作成します。
それ以外にも、コンソールで「swift」と入力すれば、REPLが起動するので対話形式でswiftの動作を確認できます。
動作環境
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.10.5
- Xcode : 7.0.1
- Java : 1.8
Swiftの基本構文をいっきに
では、Javaと比較しつつSwiftの基本構文をまとめていきます。
コメント
Java・Swiftどちらも、「//」で単一行コメント、「/* */」で複数行のコメントです。
変数/定数
Swift
//変数定義 : var name:Type = value var number:Int = 10 //定数定義 : let name:Type = value let PI:Double = 3.14
型推論により省略可能。
Java
//変数定義 int number = 10; //定数定義 final double PI = 3.14;
複数の変数を宣言できます。
Swift
//複数の変数宣言 var (a,b) = (1,2)
Javaだと下記のようになります。
Java
//複数の変数宣言 int a = 1, b = 2;
主な型
Swiftで使用する主な型は以下のとおりです。
xxx32とかxxx64とかの型は、それぞれ型のビット数。
型 | Swift | Java |
---|---|---|
真偽値 | Bool | boolean/Boolean |
符号あり整数 | Int・Int8・Int16・Int32・Int64 | int/Integer・long/Long |
符号なし整数 | UInt・UInt8・UInt16・UInt32・UInt64 | なし ※1 |
バイト | Byte | byte/Byte |
文字 | Character | char/Character |
文字列 | String | String |
浮動小数点 | Double・Float・Float32・Float64・Float80 | fload/Float・double/Double |
※1 各ラッパークラスのtoUnsigned系メソッドを使用すれば実現可能
変数うめこみ
\(<変数名>)で埋め込み。
Swift
var name = "taro" print("my name is \(name)")
String.formatで埋め込み。(使ったことない・・・)
Java
String name = "taro"; System.out.println(String.format("my name is %s", name));
数値リテラル
Swiftでは、数値を4桁毎に_で区切ることができます。
Swift
//1234569878 と同じ print(0012_3456_9878)
x進数の数値リテラルは下記のとおりです。
Swift
//2進数は頭に0b print(0b1111) //8進数は頭に0o print(0o123) //16進数は0x print(0xffff)
Javaにおいても、2進数は頭に0b、8進数は頭に0、16進数は頭に0xをつけることで
数値リテラルを記述可能です。
エスケープ
エスケープ文字は、だいたいJavaとSwiftは同じです。
特殊文字 | Swift | Java |
---|---|---|
ダブルクオート | \" | \" |
バックスラッシュ | \\ | \\ |
タブ | \t | \t |
キャリッジリターン | \r | \r |
ラインフィード | \n | \n |
ヌル文字 | \0 | なし |
数値演算・代入演算子・比較演算子・論理演算子
数値演算で使用するのは、Javaと同じく、「+」「-」「/」「*」「%」です。
ちなみに、「+」「-」「*」の計算で結果をオーバーフローさせても良い(エラーを出したくない)場合、
演算子の前に「&」をつければ、エラーを回避することができます。
Swift
//計算結果をオーバーフロー表示させる var x:Int8 = 100 var y:Int8 = 100 var result = x &* y
また、+=等の代入演算子も同じく使用可能です。
インクリメントやデクリメントも前置き・後ろ置きが同じくあります。
比較演算子も 「==」「!=」「 >」「 <」「>=」「<=」があります。
論理演算子である、「&&」「||」「!」もJavaと同じ動作になります。
キャスト
Swiftでダウンキャストするには、asまたはas!演算子を使います。
Swift
//アップキャストやリテラルの明確化はas var f = 1 as Double class Parent { ・・・ } class Child : Parent { ・・・ } //ダウンキャストはas! var p:Parent = Child() var tmp:Child = p as! Child
Javaの場合には (型)変数名 でキャストします。
Java
class Parent { ・・・ } class Child extends Parent { ・・・ } Parent p = new Child(); //ダウンキャスト Child tmp = (Child)p;
まとめ
とりあえず、Swiftの超基本部分についてまとめました。
次は制御構造の予定です。